use rand::prelude::*;
use std::collections::HashMap;

lazy_static::lazy_static! {
    static ref TEXTS: HashMap<String, String> = {
        let mut m = HashMap::new();
        m.insert("1".to_string(), r#"
一定要注意，你不是多头也不是空头，但你一定要知道一旦发生什么情况，多头会干什么，空头会
干什么。例如，多头的愿望肯定是想补上面的缺口，这就构成市场的一个潜在力量，这个力量，在
其他力量的干扰下，可能一时发挥不出来，但这反而构成我们一个更好的买入点。请好好品味这句
话：你不当多头也不当空头，但一定要知道空头多头想干什么，而走势是最终的结果，他们想干的
是否干出来了，这才是关键。干不出来，有什么后果，他们会有什么后续的步骤，这才是该想的东
西。

--摘自《2008-01-29 15:19 年线支持初显现》"#.to_string());

        m.insert("2".to_string(), r#"
要战胜市场，首先要了解市场的众生。市场是合力的，而合这力的不是机械，而是活生生的人。市
场中，最多数的，都是糊涂蛋，赚钱了不知道为什么，亏钱了不知道为什么，最后变青蛙了，也会
说，井上面的天空好大，好复杂，怎么处理啊？哪里有拐杖啊？几乎绝大多数的人，进市场来时，
根本不知道市场是什么，然后就不断投入，最后有些输红眼了，砸锅卖铁也就进来了。对于市场，
本ID有一个观点，大概有点过分，但确实是对的。市场，就是要0投入去赚钱。

--摘自《2008-01-22 16:10 教你炒股票95：修炼自己》"#.to_string());

        m.insert("3".to_string(), r#"
要认清市场，首先要认清自己，知道自己的弱点在哪里，自己在市场中的每个行为，都要清楚地意
识到。每天收盘后，都找十分钟，把自己当天的操作以及看盘时的心理过程复一次盘，这是十分必
要的。

--摘自《2007-04-04 15:31 教你炒股票42：有些人是不适合参与市场的》"#.to_string());

        m.insert("4".to_string(), r#"
今天该股90%多的换手意味着，所有中签的人基本都抛了（对手盘包括其中），而且绝大多数都在
10几元抛的。这就对了，你们10几元不看好，有人要看好，市场向所有人开着，凭什么不能买？
市场就是一个斗心理的过程，大家都想一块去了，大家还用不用活了？

--摘自《2006-06-19 16:45 鄙视所有对N中工15元不敢买50元就吃醋的人！》"#.to_string());

        m.insert("5".to_string(), r#"
你的喜好，就是你的死亡陷阱！在市场中要生存，第一条就是在市场中要杜绝一切喜好。市场的诱
惑，永远就是通过你的喜好而陷你于死亡。市场中需要的是露水之缘而不是比翼之情，天长地久之
类的东西和市场无关。市场中唯一值得天长地久的就是赢钱，任何一个来市场的人，其目的就是赢
钱，任何与赢钱无关的都是废话。必须明白，任何让你买入一只股票的理由，并不是因为这股票如
何好或被忽悠得如何好，只是你企图通过买入而赢钱，能赢钱的股票就是好的，否则都是废话。因
此，市场中的任何喜好，都是把你引入迷途的陷阱，必须逐一看破，进而洗心革面，才能在市场上
生存。

--摘自《2006-06-09 17:03 教你炒股票3：你的喜好，你的死亡陷阱！》"#.to_string());

        m.insert("6".to_string(), r#"
能看清楚自己周围的市场陷阱，还只是第一步，更进一步，要学会利用市场陷阱来赢钱。当你要买
的时候，空头的陷阱就是你的最佳机会，当你要卖的时候，多头的陷阱当然就是你的天堂。这市场
，永远不缺卖在最低点，买在最高点的人，这世界上没有什么是可以让所有人赢钱的，连大牛市中
都有很多人要亏损累累。而市场中的行为，就如同一个修炼上乘武功的过程，最终能否成功，还是
要落实到每个人的智慧、秉性、天赋、勤奋上来！

--摘自《2006-06-09 17:03 教你炒股票3：你的喜好，你的死亡陷阱！》"#.to_string());

        m.insert("7".to_string(), r#"
市场是有规律的，但市场的规律并不是显而易见的，是需要严格的分析才能得到。更重要的是，市
场的规律是一种动态的，在不同级别合力作用下显示出来的规律，企图用些单纯的指标、波段、 
波浪、分型、周期等等预测、把握，只可能错陋百出。但只要把这动态的规律在当下的直观中把握
好、应用纯熟，踏准市场的节奏，并不是不可能的。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("8".to_string(), r#"
战胜市场，其实就是战胜自己的贪婪、恐惧、愚蠢，本ID的理论只是把市场拔光给各位看，而拔光
一个人并不意味着就等于征服一个人，对于市场，其道理是一样的。不干，不可能征服市场。对于
市场来说，干就是一切。技术分析的最终意义不是去预测市场要干什么，而是市场正在干什么，是
一种当下的直观。在市场上所有的错误都是离开了这当下的直观，用想象、用情绪来代替。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("9".to_string(), r#"
熟悉本ID所解《论语》的都知道，风险是"不患"的，是无位次的，任何妄求在投资中的绝对无风险，
都是痴心妄想。唯一的办法，就是设置一个系统，使得无位次、"不患"的风险在该系统中成为有位
次，"患"的系统，这是长期战胜市场的唯一方法。

--摘自《2006-12-01 12:03 教你炒股票12：一吻何能消魂？》"#.to_string());

        m.insert("10".to_string(), r#"
贪婪和恐惧，人的死穴，周末到了，请给自己一小时去找找自己！

--摘自《2007-01-26 15:03 罗杰斯，有种的和本ID来个PK》"#.to_string());

        m.insert("11".to_string(), r#"
任何个人、阶级，其力量归根结底来自自己，无须期盼或感恩于所谓的救世主、大救星。所有救世
主、大救星都不过是人造的，连神都是人造的，没有造的人，即使是神，也什么都不是！    

--摘自《2006-04-23 18:32 鼓吹救世主、大救星的是真正的精神鸦片！》"#.to_string());

        m.insert("12".to_string(), r#"
市场中的任何理论，都是一种工具，而工具的好坏，在于使用的人。任何理论，都不可能让所有人
都赚钱，这是市场的铁律。因此，任何理论，都只能是一种参考，而不能是一种信仰。信仰，只能
是市场本身。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("13".to_string(), r#"
市场中的任何操作，都必须建立在严格的分析基础上，而不是建立在感觉、情绪、想象的基础上。
任何没有严格分析的操作，都是赌博，而不是投资。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("14".to_string(), r#"
市场中的任何预测，都是一种概率，而不是一种确定性。任何把概率当作确定性的人，都会在市场
中失败。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("15".to_string(), r#"
市场中的任何成功，都来自于对市场的正确理解，而不是来自于对市场的错误理解。任何对市场的
错误理解，都会导致失败。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("16".to_string(), r#"
市场中的任何失败，都来自于对市场的错误理解，而不是来自于对市场的正确理解。任何对市场的
正确理解，都会导致成功。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("17".to_string(), r#"
市场中的任何理论，都是一种工具，而工具的好坏，在于使用的人。任何理论，都不可能让所有人
都赚钱，这是市场的铁律。因此，任何理论，都只能是一种参考，而不能是一种信仰。信仰，只能
是市场本身。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("18".to_string(), r#"
市场中的任何操作，都必须建立在严格的分析基础上，而不是建立在感觉、情绪、想象的基础上。
任何没有严格分析的操作，都是赌博，而不是投资。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("19".to_string(), r#"
市场中的任何预测，都是一种概率，而不是一种确定性。任何把概率当作确定性的人，都会在市场
中失败。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m.insert("20".to_string(), r#"
市场中的任何成功，都来自于对市场的正确理解，而不是来自于对市场的错误理解。任何对市场的
错误理解，都会导致失败。

--摘自《2006-12-27 15:18 教你炒股票19：学习缠中说禅技术分析理论的关键》"#.to_string());

        m
    };
}

/// 获取所有警句
pub fn get_all_texts() -> &'static HashMap<String, String> {
    &TEXTS
}

/// 获取指定编号的警句
pub fn get_text(key: &str) -> Option<&'static str> {
    TEXTS.get(key).map(|s| s.as_str())
}

/// 随机获取一条警句
pub fn get_random_text() -> &'static str {
    let mut rng = thread_rng();
    let keys: Vec<&String> = TEXTS.keys().collect();
    let random_key = keys[rng.gen_range(0..keys.len())];
    TEXTS.get(random_key).unwrap().as_str()
}

/// 打印一条随机警句
pub fn print_one() {
    println!("{}", get_random_text());
}

/// 获取警句数量
pub fn get_text_count() -> usize {
    TEXTS.len()
}

/// 获取所有警句的键
pub fn get_all_keys() -> Vec<&'static str> {
    TEXTS.keys().map(|k| k.as_str()).collect()
}

/// 检查是否存在指定编号的警句
pub fn has_text(key: &str) -> bool {
    TEXTS.contains_key(key)
}

/// 获取指定范围的警句
pub fn get_texts_in_range(start: usize, end: usize) -> Vec<&'static str> {
    let keys: Vec<&String> = TEXTS.keys().collect();
    let start = start.min(keys.len());
    let end = end.min(keys.len());
    
    keys[start..end]
        .iter()
        .filter_map(|k| TEXTS.get(*k).map(|s| s.as_str()))
        .collect()
}

/// 搜索包含指定关键词的警句
pub fn search_texts(keyword: &str) -> Vec<&'static str> {
    TEXTS
        .values()
        .filter(|text| text.contains(keyword))
        .map(|s| s.as_str())
        .collect()
}

/// 获取警句统计信息
pub fn get_statistics() -> HashMap<String, usize> {
    let mut stats = HashMap::new();
    stats.insert("total_count".to_string(), TEXTS.len());
    
    let mut total_length = 0;
    for text in TEXTS.values() {
        total_length += text.len();
    }
    stats.insert("total_length".to_string(), total_length);
    
    stats
} 